<?php
namespace Admin\Model;

class RuleModel extends CommonModel{
	protected $fields = array('id','rule_name','module_name','controller_name','action_name','parent_id','is_show');
	protected $_validate = array(
		array('rule_name','require','权限名称必须填写'),
		array('module_name','require','模型名称必须填写'),
		array('controller_name','require','控制器名称必须填写'),
		array('action_name','require','方法名称必须填写'),

		);

	public function _after_insert($data,$option){
		//获取所有的超级管理员用户
		$user = M('AdminRole')->where('role_id=1')->select();
		//将所有的超级管理员用户对应的缓存文件删除
		foreach($user as $key=>$value){
			S('user_'.$value['admin_id'],null);
		}
	}

    //获取某个分类的子分类
    public function getChildren($id){
        //先获取所有的分类信息
        $data=$this->select();
        //dump($id);die;
        //对获取的信息进去格式化
        $list=$this->getTree($data,$id,1,false);//为false，查询单一数据,清除缓存
        //dump($list);die;

        foreach ($list as $key=>$value){
            $tree[]=$value['id'];
        }
        return $tree;
    }
	//获得格式化的数信息
	public function getCateTree($id=0){
		$data=$this->select();
		//dump($data);die;
		//对获取的信息进行格式化
		$list =$this-> getTree($data,$id);
		//dump($list);die;
		return $list;
	}

	//格式化分类信息  无限极分类
	public function getTree($data,$id=0,$lev=1,$iscache=true){//为true查询所有数据
		static $list = array();
        //根据参数决定是否需要重置
        if(!$iscache){
            $list=array();
        }
		foreach($data as $key=>$value){
			if($value['parent_id']==$id){
				$value['lev'] = $lev;
				$list[]=$value;
				//使用递归方法获取分类下的子分类
				$this->getTree($data,$value['id'],$lev+1);
			}
		}
			return $list;
			//dump($list);die;
	}

	//删除分类
	public function dels($id){
		//如果删除的分类下有子类不允许删除
		$result = $this->where('parent_id='.$id)->find();
		if($result){
			return false;
		}
		return $this->where('id='.$id)->delete();
	}

	//修改
	public function update($data){
		$tree = $this->getCateTree($data['id']);
		$tree[]=array('id'=>$data['id']);
		//如果提交的parent_id值等于自己及子分类的某个ID直接不允许修改
		foreach ($data as $key=>$value){
			if($data['parent_id']==$value['id']){
				$this->error='不能设置子分类为父分类';
				return false;
			}
		}
		return $this->save($data);
	}
	
}